import Vue from 'vue'
import Router from 'vue-router'
import store from '@/store'
Vue.use(Router)


const Layout = () => import('@/view/layout.vue')
const Home = () => import('@/view/home.vue')
const Login = () => import('@/view/login.vue')
const Detail = () => import('@/view/detail.vue')
const Banner = () => import('@/view/banner.vue')
const Fail = () => import('@/view/404.vue')
// 路由规则
const routes = [
    // 一级路由布局容器
    {
      path: '/',
      component: Layout,
      children: [
        { path: '/', component: Home },
       
        
        { path: '/detail', component: Detail },
        { path: '/banner', component: Banner },
      ]
    },
    { path: '/login', component: Login },
    { path: '/fail', component: Fail },
   
  ]


  const router = new Router({
    routes: routes
})

const whiteList=['/login','/404']

router.beforeEach(async (to, from, next) => {
    //to:去的那个路由的信息
    //from:从那个路由而来的信息
    //next:放行函数!!!!!! 
    //第一种：next(),放行函数，放行到它想去的路由！！！
    //第二种:next(path),守卫指定放行到那个路由去?

    //用户是否登录:取决于仓库里面是否有token！！！
    //每一次路由跳转之前需要用有用户信息在跳转,没有发请求获取用户信息在跳转！！！！
    //token
    let hasToken = store.state.user.token;
    //用户信息
    let hasNickName = store.state.user.name;
    //用户登录
    if (hasToken) {
        //用户登录了,不能去login
        if (to.path == "/login") {
            next('/home');
        } else {
            //用户登陆了,而且还有用户信息【去的并非是login】
            if (hasNickName) {
                next();
            } else {
                //用户登陆了,但是没有用户信息 
                try {
                    //发请求获取用户信息以后在放行
                    await store.dispatch('getInfo');
                    next();
                } catch (error) {
                    //用户没有信息，还携带token发请求获取用户信息【失败】
                    //token【学生证失效了】
                    //token失效:本地清空数据、服务器的token通知服务器清除
                    await store.dispatch('lgout');
                    //回到登录页，重新获取一个新的学生证
                    next('/login');
                }
            }
        }
    } else {
       if(whiteList.indexOf(to.path)>-1){
           next()
       }else{
           next('/login')
       }
    }
});

export default router